summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt110
1 files changed, 66 insertions, 44 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
index 944ae652e..1addb2326 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
@@ -39,6 +39,7 @@ import androidx.window.layout.WindowLayoutInfo
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.slider.Slider
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.yuzu.yuzu_emu.HomeNavigationDirections
import org.yuzu.yuzu_emu.NativeLibrary
@@ -129,6 +130,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
return binding.root
}
+ // This is using the correct scope, lint is just acting up
+ @SuppressLint("UnsafeRepeatOnLifecycleDetector")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.surfaceEmulation.holder.addCallback(this)
binding.showFpsText.setTextColor(Color.YELLOW)
@@ -205,59 +208,80 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
)
- viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
- lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
- WindowInfoTracker.getOrCreate(requireContext())
- .windowLayoutInfo(requireActivity())
- .collect { updateFoldableLayout(requireActivity() as EmulationActivity, it) }
- }
- }
-
GameIconUtils.loadGameIcon(game, binding.loadingImage)
binding.loadingTitle.text = game.title
binding.loadingTitle.isSelected = true
binding.loadingText.isSelected = true
- emulationViewModel.shaderProgress.observe(viewLifecycleOwner) {
- if (it > 0 && it != emulationViewModel.totalShaders.value!!) {
- binding.loadingProgressIndicator.isIndeterminate = false
-
- if (it < binding.loadingProgressIndicator.max) {
- binding.loadingProgressIndicator.progress = it
+ viewLifecycleOwner.lifecycleScope.apply {
+ launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ WindowInfoTracker.getOrCreate(requireContext())
+ .windowLayoutInfo(requireActivity())
+ .collect {
+ updateFoldableLayout(requireActivity() as EmulationActivity, it)
+ }
}
}
+ launch {
+ repeatOnLifecycle(Lifecycle.State.CREATED) {
+ emulationViewModel.shaderProgress.collectLatest {
+ if (it > 0 && it != emulationViewModel.totalShaders.value) {
+ binding.loadingProgressIndicator.isIndeterminate = false
+
+ if (it < binding.loadingProgressIndicator.max) {
+ binding.loadingProgressIndicator.progress = it
+ }
+ }
- if (it == emulationViewModel.totalShaders.value!!) {
- binding.loadingText.setText(R.string.loading)
- binding.loadingProgressIndicator.isIndeterminate = true
+ if (it == emulationViewModel.totalShaders.value) {
+ binding.loadingText.setText(R.string.loading)
+ binding.loadingProgressIndicator.isIndeterminate = true
+ }
+ }
+ }
}
- }
- emulationViewModel.totalShaders.observe(viewLifecycleOwner) {
- binding.loadingProgressIndicator.max = it
- }
- emulationViewModel.shaderMessage.observe(viewLifecycleOwner) {
- if (it.isNotEmpty()) {
- binding.loadingText.text = it
+ launch {
+ repeatOnLifecycle(Lifecycle.State.CREATED) {
+ emulationViewModel.totalShaders.collectLatest {
+ binding.loadingProgressIndicator.max = it
+ }
+ }
}
- }
-
- emulationViewModel.emulationStarted.observe(viewLifecycleOwner) { started ->
- if (started) {
- binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
- ViewUtils.showView(binding.surfaceInputOverlay)
- ViewUtils.hideView(binding.loadingIndicator)
-
- // Setup overlay
- updateShowFpsOverlay()
+ launch {
+ repeatOnLifecycle(Lifecycle.State.CREATED) {
+ emulationViewModel.shaderMessage.collectLatest {
+ if (it.isNotEmpty()) {
+ binding.loadingText.text = it
+ }
+ }
+ }
}
- }
+ launch {
+ repeatOnLifecycle(Lifecycle.State.CREATED) {
+ emulationViewModel.emulationStarted.collectLatest {
+ if (it) {
+ binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
+ ViewUtils.showView(binding.surfaceInputOverlay)
+ ViewUtils.hideView(binding.loadingIndicator)
- emulationViewModel.isEmulationStopping.observe(viewLifecycleOwner) {
- if (it) {
- binding.loadingText.setText(R.string.shutting_down)
- ViewUtils.showView(binding.loadingIndicator)
- ViewUtils.hideView(binding.inputContainer)
- ViewUtils.hideView(binding.showFpsText)
+ // Setup overlay
+ updateShowFpsOverlay()
+ }
+ }
+ }
+ }
+ launch {
+ repeatOnLifecycle(Lifecycle.State.CREATED) {
+ emulationViewModel.isEmulationStopping.collectLatest {
+ if (it) {
+ binding.loadingText.setText(R.string.shutting_down)
+ ViewUtils.showView(binding.loadingIndicator)
+ ViewUtils.hideView(binding.inputContainer)
+ ViewUtils.hideView(binding.showFpsText)
+ }
+ }
+ }
}
}
}
@@ -274,9 +298,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
}
} else {
- if (EmulationMenuSettings.showOverlay &&
- emulationViewModel.emulationStarted.value == true
- ) {
+ if (EmulationMenuSettings.showOverlay && emulationViewModel.emulationStarted.value) {
binding.surfaceInputOverlay.post {
binding.surfaceInputOverlay.visibility = View.VISIBLE
}